import { EditType } from "@/type/BaseEnum"
import { ref } from "vue"
import { AddUserModel } from '@/api/user/UserModel';
import { Result } from '@/http/request';
import { addUserApi, editUserApi, deleteUserApi } from '@/api/user/user';
import useInstance from "@/hooks/useInstance";
/**
 * 这个是专门抽取方法的文件，用来把方法提取出来
 * 这个文件的使用是在父组件中调用子组件的时候使用
 * 是在父组件中引入子组件，平级的
 * 这个是引入子组件的使用方法
 */
export default function useUser(getUserList: any) {
  // 导入全局属性
  const { global } = useInstance()
  // 使用ref属性获取子组件，便于操作它上面的属性
  const userAddRef = ref<{ show: (type: string, row?: AddUserModel) => void }>()
  // 分配权限的子组件
  const assignRoleRef = ref<{ show: (name: string, userId: string | number) => void }>()
  // 新增
  const addBtn = () => {
    userAddRef.value?.show(EditType.ADD)
  }
  // 编辑
  const editBtn = (row: AddUserModel) => {
    userAddRef.value?.show(EditType.EDIT, row)
  }
  // 删除
  const deleteBtn = async (id: number) => {
    let parm = {
      id: id
    }
    //信息提示
    let confirm = await global.$myconfirm('确定删除该数据吗?')
    if (confirm) {
      let res = await deleteUserApi(parm)
      if (res && res.code == 200) {
        global.$message({ message: res.msg, type: "success" })
        //刷新列表
        getUserList();
      }
    }
  }
  // 分配角色
  const assignBtn = (row: AddUserModel) => {
    assignRoleRef.value?.show(row.loginName, row.id)
  }

  // 新增编辑保存
  const save = async (parm: AddUserModel) => {
    console.log('父组件接收到参数', parm);
    let res: Result
    if (parm.type == EditType.ADD) {
      res = await addUserApi(parm)
    } else {
      res = await editUserApi(parm)
    }
    if (res && res.code == 200) {
      getUserList()
      global.$message({ message: res.msg, type: 'success' })
    }
  }
  return {
    userAddRef,
    addBtn,
    editBtn,
    deleteBtn,
    assignBtn,
    save,
    assignRoleRef
  }
}